package module

import (
	"os"
	"publiclib/cache"
	"publiclib/config"
	"sync"

	"generatorserver/internal/gcs"
	"generatorserver/module/grpcsvc"

	"github.com/gomodule/redigo/redis"
)

// 标准返回值序列化
type IRespUnmarshal interface {
	RespUnmarshal([]byte) error
	CheckVerfySignValue() error
}

type ISelfRespUnmarshal interface {
	IRespUnmarshal
	SelfRespUnmarshal() error
}

var logicInited = new(sync.Once)

// 以配置再次初始一个db值
func InitRedisDbN(idx uint8) *redis.Pool {
	ci := config.Instance()
	return cache.InitExternal(ci.Redis.GetURI(), ci.Redis.Pass, 5000, idx)
}

const (
	rpc_cert_pwd = "RPC_CERT_PASSWORD"
)

// 此函数用于module包的自身部分逻辑函数的初始，一般由main包调用
func InitLogicFromMain() {
	// 设计成只运行一次
	logicInited.Do(func() {
		// 从env中取出密钥
		pwd := gcs.Sp().Recover(os.Getenv(rpc_cert_pwd))
		cnf := grpcsvc.LoadLexarGRPCServerTlsConfV2("server_cert.p12", pwd)
		go grpcsvc.GRPCServerStart(cnf)
	})
}
